package com.qcit.base.utils;

import android.app.Activity;
import android.app.ActivityManager;
import android.content.Context;

import java.util.Stack;

/**
 * Activity管理类 
 *  
 */  
public class AppManager {  
  
    private static Stack<Activity> activityStack;
  
    private static AppManager instance;  
  
    private AppManager() {  
    }  
  
    /** 
     * 单一实例 
     */  
    public static AppManager getAppManager() {  
        if (instance == null) {  
            instance = new AppManager();  
        }  
        return instance;  
    }  
  
    /** 
     * 添加Activity到堆栈 
     */  
    public void addActivity(Activity activity) {  
        if (activityStack == null) {  
            activityStack = new Stack<Activity>();  
        }  
        activityStack.add(activity);  
    }  
  
    /** 
     * 获取当前Activity（堆栈中最后一个压入的） 
     */  
    public Activity currentActivity() {
        Activity activity = activityStack.lastElement();  
        return activity;  
    }  
  
    /** 
     * 结束当前Activity（堆栈中最后一个压入的） 
     */  
    public void finishActivity() {  
        Activity activity = activityStack.lastElement();  
        finishActivity(activity);  
    }  
  
    /** 
     * 结束指定的Activity 
     */  
    public void finishActivity(Activity activity) {  
        if (activity != null) {  
            activityStack.remove(activity);  
//            activity.finish();
            activity = null;  
        }  
    }

    public void finishAllActivityToRestart(Class<?> cls) {
        if (null != activityStack && !activityStack.empty()){
            for (Activity aty:activityStack) {
                if (!aty.getClass().equals(cls)) {
                    finishActivity(aty);
                }
            }
        }
    }

    /** 
     * 结束指定类名的Activity 
     */  
    public void finishActivity(Class<?> cls) {  
        for (int i = 0; i< activityStack.size(); i++) {
            if (activityStack.get(i).getClass().equals(cls)) {
                finishActivity(activityStack.get(i));
            }  
        }  
    }  
  
    /** 
     * 结束所有Activity 
     */  
    public void finishAllActivity() {
        int size = activityStack.size();
        for (int i = size-1; i >-1 ; i--) {
            if (null != activityStack.get(i)) {  
                activityStack.get(i).finish();  
            }  
        }  
        activityStack.clear();  
    }  
  
    /** 
     * 退出应用程序 
     */  
    @SuppressWarnings("deprecation")  
    public void AppExit(Context context) {
        try {  
            finishAllActivity();  
            ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
            activityManager.restartPackage(context.getPackageName());  
            System.exit(0);  
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
    }  
} 